﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ReadWriteCsv;
using System.Diagnostics;
using System.IO;

namespace Rebides
{
    /// <summary>
    /// Descrição: Classe para processar dados CSV
    /// Data: 22/01/12
    /// Autor: Luís Costa Nº 6032
    /// </summary>
    /// 
    class ProcessCSV
    {
        /// <summary>
        /// Processa os dados de um ficheiro CSV do rebides
        /// </summary>
        /// <param name="fileName">Nome do ficheiro CSV</param>
        /// <returns>Dicionário com os dados</returns>
        public List<List <string>> process_rebides_csv(string fileName)
        {
            List<List<string>> dictData = new List<List<string>>();

            //Listas temporárias para guardar os dados antes de colocar no dicionario
            List<string> lstCod_Docente = new List<string>();
            List<string> lstNome = new List<string>();
            List<string> lstUltimo_Grau = new List<string>();
            List<string> lstCurso = new List<string>();
            List<string> lstCategoria = new List<string>();
            List<string> lstRegime_Tempo = new List<string>();
            List<string> lstTipo_Estab = new List<string>();
            List<string> lstNome_Estab = new List<string>();

            //Abre o ficheiro CSV
            //-----------------------
            CsvFileReader reader = new CsvFileReader(fileName);

            //Lê o primeira linha do CSV que tem o cabeçalho dos campos.
            //Este valor será utilizado para validar se os restantes tem o mesmo nº de campos
            CsvRow row = new CsvRow();
            reader.ReadRow(row);
            int totalRows = row.Count;

            while (reader.ReadRow(row))
            {
                //Testa se a linha é válida
                if (totalRows == row.Count)
                {
                    //Converte os carateres para unicode
                    //--------------------------
                    //row = this.unicode_encoder(row);

                    lstCod_Docente.Add(row[0].ToUpper());
                    lstNome.Add(row[1].ToUpper());
                    lstUltimo_Grau.Add(row[2].ToUpper());
                    lstCurso.Add(row[3].ToUpper());
                    lstCategoria.Add(row[4].ToUpper());
                    lstRegime_Tempo.Add(row[5].ToUpper());
                    lstTipo_Estab.Add(row[7].ToUpper());
                    lstNome_Estab.Add(row[8].ToUpper());
                }
            }

            //Coloca os dados no dicionário
            dictData.Add(lstCod_Docente);
            dictData.Add(lstNome);
            dictData.Add(lstUltimo_Grau);
            dictData.Add(lstCurso);
            dictData.Add(lstCategoria);
            dictData.Add(lstRegime_Tempo);
            dictData.Add(lstTipo_Estab);
            dictData.Add(lstNome_Estab);

            return dictData;
        }
        /// <summary>
        /// Converte um row do CSVReader para UTF-8
        /// </summary>
        /// <param name="row">Linha do CSVReader</param>
        /// <returns>Linha do CSVReader convertida</returns>
        protected CsvRow unicode_encoder(CsvRow row)
        {
            for (int n = 0; n < row.Count(); n++)
            {               
                //Encoding utf = new UTF8Encoding();
                //Encoding unicode = new UnicodeEncoding();

                //byte[] encodedBytes = utf.GetBytes(row[n]);
                //Encoding.Convert(utf, unicode, encodedBytes);
                //row[n] = unicode.GetString(encodedBytes);

                ////Byte[] encodedBytes = Encoding.Convert("UTF-8", "Unicode", encodedBytes);

                //row[n] = Encoding.Unicode.GetString(encodedBytes);
            }

            return row;
        }
    }
}
